<?php

	class SiteGroupHandler {
		
		/**
		 * SiteGroup objektumok asszociatív tömbje, id szerint kulcsolva, aktuális nyelven 
		 *
		 * @var array
		 */
		public static $siteGroups = null;
		
		/**
		 * Az init() meghívásánál ezt a nyelvkódot használta a hívó, megjegyezzük!
		 *
		 * @var string
		 */
		private static $_langcode = null;
		
		/**
		 * ExtendedSiteGroup objektumok asszociatív tömbje id-vel kulcsolva.
		 * Ez egy cache lényegében, csak akkor töltődik ki ha vki elkéri a getExtendedSiteGroupsArray()
		 * metódussal.
		 * Természetesen ha a $siteGroups változik, akkor meg el kell dobni ezt a cache-t...
		 *
		 * @var array
		 */
		private static $_extSiteGroups = null;
		
		/**
		 * Az összes system-wide nyelvkód. Ez itt egy cache, kitöltődik amikor getAllSysLanguageCodes()
		 * először fut, és a req-response loopban többször már nem kérdezgeti a db-t így.
		 *
		 * @var array
		 */
		private static $_allSysLanguageCodes = null;
		
		
		
		/**
		 * Felnyalja az adott nyelv szerint a SiteGroup cuccost
		 *
		 * @param string $langcode
		 */
		public static function init($langcode)
		{
			SiteGroupHandler::$siteGroups = array();
			SiteGroupHandler::$_extSiteGroups = null;
			
			$groupRecs = SiteDBHelper::getSiteGroups($langcode);
			if(is_null($groupRecs))
			{
				$msg = "failed to read up site groups due to db error!";
				Log::error($msg);
				MailHelper::sendAdminMail("failed to init site groups!", $msg);
				return;
			}
			
			foreach ($groupRecs as $groupRec)
			{
				$groupObj = SiteGroup::createFromDBRecord($groupRec);
				SiteGroupHandler::$siteGroups[$groupObj->id] = $groupObj;
			}
		}
		
		/**
		 * Visszaadja h a rendszerben hányféle nyelv van
		 *
		 * @return array nyelvkódok tömbje
		 */
		public static function getAllSysLanguageCodes()
		{
			if(is_null(SiteGroupHandler::$_allSysLanguageCodes))
				SiteGroupHandler::$_allSysLanguageCodes = SiteDBHelper::getAllLanguageCodesInTheSystem();
			
			return SiteGroupHandler::$_allSysLanguageCodes;
		}
		
		/**
		 * Visszaadja h az init() meghívásánál melyik nyelvkód volt használatos
		 *
		 * @return string
		 */
		public static function getInitLangcode()
		{
			return SiteGroupHandler::$_langcode;
		}
		
		
		/**
		 * Visszaadja adott id-hez tartozó csoportot leíró SiteGroup objektumot vagy null ha nincs ilyen
		 * csoport
		 *
		 * @param int $groupId
		 * @return SiteGroup
		 */
		public static function getSiteGroup($groupId)
		{
			if(isset(SiteGroupHandler::$siteGroups[$groupId]))
				return SiteGroupHandler::$siteGroups[$groupId];
				
			return null;
		}

		
		/**
		 * Visszaadja adott id-hez tartozó csoport nevét - természetesen az aktuális nyelven.
		 * Ha nincs, akkor az id='' stringet adja vissza
		 *
		 * @param int $groupId
		 * @return SiteGroup
		 */
		public static function getSiteGroupName($groupId)
		{
			if(isset(SiteGroupHandler::$siteGroups[$groupId]))
				return SiteGroupHandler::$siteGroups[$groupId]->name;
				
			return "id=$groupId";
		}

		
		/**
		 * Visszaadja adott id-hez tartozó csoportot leíró ExtendedSiteGroup objektumot vagy null ha nincs ilyen
		 * csoport
		 *
		 * @param int $groupId
		 * @return ExtendedSiteGroup
		 */
		public static function getExtendedSiteGroup($groupId)
		{
			if(isset(SiteGroupHandler::$siteGroups[$groupId]))
				return ExtendedSiteGroup::createFromSiteGroup(SiteGroupHandler::$siteGroups[$groupId]);
				
			return null;
		}
		
		
		/**
		 * Visszaadja az összes site csoportot, combobox-hoz használható
		 * formában. Ez egy asszociatív tömb, melnyek kulcsai a csoport id-k, elemei pedig
		 * a csoportok nevei.
		 *
		 * @return array
		 */
		public static function getSiteGroupsForComboBox()
		{
			$comboArr = array();
			
			foreach(SiteGroupHandler::$siteGroups as $id => $groupObj)
			{
				$comboArr[$id] = $groupObj->name;
			}

			// mehet is vissza
			return $comboArr;
		}
		
		/**
		 * Néha a SiteGroup-ok tömbje nem elég.
		 * Ez a metódus képes visszaadni az ExtendedSiteGroup objektumok tömbjét
		 *
		 * @return array
		 */
		public static function getExtendedSiteGroupsArray()
		{
			if(is_null(SiteGroupHandler::$_extSiteGroups))
			{
				SiteGroupHandler::$_extSiteGroups = array();
				foreach(SiteGroupHandler::$siteGroups as $siteGroup)
				{
					$extSiteGroup = ExtendedSiteGroup::createFromSiteGroup($siteGroup);
					SiteGroupHandler::$_extSiteGroups[$extSiteGroup->id] = $extSiteGroup;
				}
			}
			
			return SiteGroupHandler::$_extSiteGroups;
		}
		
	}
?>